package com.tanhua.task;


/*
*  spring Task定时调度的使用：
*      1 在启动类上添加注解@EnableScheduling开启定时调度
*      2 编写类和方法进行执行
*               类：要交给spring管理
*               方法：
*                  1 方法不能有返回值 不能有参数 方法名任意
*                  2 在方法上通过注解@Scheduled指定该方法要执行的时间
* */

import cn.hutool.core.date.DateUtil;
import com.tanhua.domain.AnalysisByDay;
import com.tanhua.mapper.AnalysisByDayMapper;
import com.tanhua.mapper.LogMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class MyTask {

    @Autowired
    private LogMapper logMapper;

    @Autowired
    private AnalysisByDayMapper analysisByDayMapper;



    @Scheduled(cron = "00 59 00 * * ?")
    public void aaa(){ //指定时间一到 该方法自动调用
        String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        System.out.println(time);


        // 需求：每晚12点去tb_log表中查出统计的数据 放入到tb_analysis_by_day表中

        // 获取今日日期 2021-01-21
        String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        //获取昨天的日期 2021-01-20
        String yesterday = DateUtil.yesterday().toString("yyyy-MM-dd");
        //1 查询注册数
        Integer numRegistered=logMapper.findNumRegistered(today,"0102");
        //2 查询登录数
        Integer numLogin=logMapper.findNumLogin(today,"0101");
        //3 查询活跃数
        Integer numActive=logMapper.findNumActive(today);
        //4 查询留存数
        Integer numRetention1d=logMapper.findNumRetention1d(yesterday,today);

        //5 封装给统计表（实体）
        AnalysisByDay analysisByDay = new AnalysisByDay();
        analysisByDay.setNumRegistered(numRegistered);
        analysisByDay.setNumLogin(numLogin);
        analysisByDay.setNumActive(numActive);
        analysisByDay.setNumRetention1d(numRetention1d);
        analysisByDay.setRecordDate(DateUtil.parseDate(today));
        analysisByDay.setCreated(new Date());
        analysisByDay.setUpdated(new Date());


        //6 将实体插入到统计表中tb_analysis_by_day
        analysisByDayMapper.insert(analysisByDay);

        System.out.println("统计完毕...");
    }
}
